﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using rent_car.Manejadores;
using System.Collections;

namespace rent_car
{
    class ManejadorDeClientes: Manejador
    {
        public static ManejadorDeClientes getInstancia()
        { 
            if(instancia == null)
            {
                instancia = new ManejadorDeClientes();
            }
            return instancia;            
        }

        private ManejadorDeClientes()
        {
            manejadorDB = new EnlaceDatosDataContext();
        }

        public cliente GetClientePorIdentificador(string identificador)
        {
            foreach (cliente c in manejadorDB.clientes)
            {
                if (FiltradorDeCampos.filtrarNumeros("()-", c.persona.no_lic).Equals(identificador)
                    || FiltradorDeCampos.filtrarNumeros("()-", c.persona.telefono).Equals(identificador))
                {
                    return c;
                }

            }
            return null;
        }

        #region Manejador Members

        public void agregar(object objeto)
        {       
            cliente cliente = (cliente) objeto;
            
            //agregando cliente en la tabla persona
            manejadorDB.agregarPersona(
                cliente.persona.nombre,
                cliente.persona.apellido,
                cliente.persona.telefono,
                cliente.persona.celular,
                cliente.persona.sexo,
                cliente.persona.fecha_nac,
                cliente.persona.no_lic,
                cliente.persona.fecha_exp_lic,
                cliente.persona.email,
                cliente.persona.direccion,
                cliente.persona.no_tarj_cred,
                cliente.persona.fecha_exp_tarj_cre,
                cliente.persona.mal_historial,
                cliente.persona.observacion,
                cliente.persona.ciudad_id
                );

           cliente.persona.persona_id = manejadorDB.personas.ToList().Last().persona_id;
          //agregando cliente en tabla clientes
            manejadorDB.agregarCliente(
                cliente.persona.persona_id, 
                cliente.pasaporte,
                cliente.img_pasaporte,
                cliente.activo);

            cliente.conductore.cliente = cliente;
            agregarConductor(cliente.conductore);
            
            cliente.compania.cliente = cliente;
            agregarCompania(cliente.compania);
        }

        private void agregarConductor(conductore conductor)
        {
            if (!conductor.persona.nombre.Equals(""))
            {
                manejadorDB.agregarPersona2(
                    conductor.persona.nombre,
                    conductor.persona.apellido,
                    conductor.persona.fecha_nac,
                    conductor.persona.no_lic,
                    conductor.persona.fecha_exp_lic);
                conductor.persona.persona_id = manejadorDB.personas.ToList().Last().persona_id;
                manejadorDB.agregarConductores(conductor.persona.persona_id, conductor.cliente.persona.persona_id);
            }
        }

        private void agregarCompania(compania compania) {
            if (!compania.nombre.Equals(""))
            {
                manejadorDB.agregarCompanias(
                    compania.cliente.persona.persona_id,
                    compania.ciudade.ciudad_id,
                    compania.nombre,
                    compania.direccion,
                    compania.telefono1,
                    compania.telefono2,
                    compania.celular,
                    compania.email,
                    compania.fax);
            }
        }       

        public void eliminar(int id)
        {
            manejadorDB.eliminarClientes(id);
        }

        public void modificar(object objeto, bool companiaExiste)
        {
            cliente clienteModificado = (cliente)objeto;
            //Modificar persona
            manejadorDB.modificarPersonas(
                clienteModificado.persona.persona_id,
                clienteModificado.persona.nombre,
                clienteModificado.persona.apellido,
                clienteModificado.persona.telefono,
                clienteModificado.persona.celular,
                clienteModificado.persona.sexo,
                clienteModificado.persona.fecha_nac,
                clienteModificado.persona.no_lic,
                clienteModificado.persona.fecha_exp_lic,
                clienteModificado.persona.email,
                clienteModificado.persona.direccion,
                clienteModificado.persona.no_tarj_cred,
                clienteModificado.persona.fecha_exp_tarj_cre,
                clienteModificado.persona.mal_historial,
                clienteModificado.persona.observacion,
                clienteModificado.persona.ciudad_id);
            //modificar cliente
            manejadorDB.modificarCliente(
                clienteModificado.persona.persona_id,
                clienteModificado.pasaporte,
                clienteModificado.img_pasaporte);
           
            //modificar conductor 
            if (clienteModificado.conductore.persona.persona_id != 0)
            {
                manejadorDB.modificarConductor(
                    clienteModificado.conductore.persona.persona_id,
                    clienteModificado.conductore.persona.nombre,
                    clienteModificado.conductore.persona.apellido,
                    clienteModificado.conductore.persona.fecha_nac,
                    clienteModificado.conductore.persona.no_lic,
                    clienteModificado.conductore.persona.fecha_exp_lic);
            }
            else {
                agregarConductor(clienteModificado.conductore);
            }

            //modificar compania
            if (companiaExiste)
            {
                manejadorDB.modificarCompanias(
                    clienteModificado.persona.persona_id,
                    clienteModificado.persona.ciudade.ciudad_id,
                    clienteModificado.compania.nombre,
                    clienteModificado.compania.direccion,
                    clienteModificado.compania.telefono1,
                    clienteModificado.compania.telefono2,
                    clienteModificado.compania.celular,
                    clienteModificado.compania.email,
                    clienteModificado.compania.fax);
            }
            else 
            {
                agregarCompania(clienteModificado.compania);
            }
        }

        public ICollection getObject()
        {
            var c = from clt in manejadorDB.clientes
                    where clt.activo == true
                    select clt;

            return c.ToList();
        }
        #endregion

        private EnlaceDatosDataContext manejadorDB = null;
        private static ManejadorDeClientes instancia = null;
        private int item;

        #region Manejador Members


        public void modificar(object objeto)
        {
            throw new NotImplementedException();
        }

        #endregion
    } 
}
